home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 April / PCWorld_2007-04_cd.bin / audio-video / kmplayer / kmp.exe / Shader / SharpenComplex (jim ro).txt < prev    next >
Text File  |  2006-09-08  |  2KB  |  85 lines

  1. // SharpenComplex ( jim.ro )=ps_2_0
  2. // http://www.homecinema-fr.com/forum/viewtopic.php?t=29814317 
  3.  
  4. sampler s0 : register(s0); 
  5. float4 p0 : register(c0); 
  6. float4 p1 : register(c1); 
  7.  
  8. #define width (p0[0]) 
  9. #define height (p0[1]) 
  10.  
  11. #define dx (p1[0]) 
  12. #define dy (p1[1]) 
  13.  
  14. float4 main( float2 tex : TEXCOORD0 ) : COLOR 
  15. // definition des pixels : original, flout├⌐, corig├⌐, final 
  16. float4 ori; 
  17. float4 flou; 
  18. float4 cori; 
  19. float4 final; 
  20.  
  21. //////////////////////////////////////////////////// 
  22. // r├⌐cupp├⌐ration de la matrice de 9 points 
  23. //   [ 1, 2 , 3 ] 
  24. //   [ 4,ori, 5 ] 
  25. //   [ 6, 7 , 8 ] 
  26.  
  27.    ori = tex2D(s0, tex); 
  28.    float4 c1 = tex2D(s0, tex + float2(-dx,-dy)); 
  29.    float4 c2 = tex2D(s0, tex + float2(0,-dy)); 
  30.    float4 c3 = tex2D(s0, tex + float2(dx,-dy)); 
  31.    float4 c4 = tex2D(s0, tex + float2(-dx,0)); 
  32.    float4 c5 = tex2D(s0, tex + float2(dx,0)); 
  33.    float4 c6 = tex2D(s0, tex + float2(-dx,dy)); 
  34.    float4 c7 = tex2D(s0, tex + float2(0,dy)); 
  35.    float4 c8 = tex2D(s0, tex + float2(dx,dy)); 
  36.  
  37. //////////////////////////////////////////////////// 
  38. // calcul image floue (filtre gaussien) 
  39.    // pour normaliser les valeurs, il faut diviser par la somme des coef 
  40.    // 1/(1+2+1+2+4+2+1+2+1) = 1/ 16 = .0625 
  41.    flou = (c1+c3+c6+c8 + 2*(c2+c4+c5+c7)+ 4*ori)*0.0625; 
  42.  
  43. // soustraction de l'image flou ├á l'image originale 
  44.    cori = 2*ori - flou; 
  45.  
  46. //////////////////////////////////////////////////// 
  47. // d├⌐tection des contours 
  48. float delta1; 
  49. float delta2; 
  50. float value; 
  51.  
  52. // par filtre de sobel 
  53.    // Gradient horizontal 
  54.    //   [ -1, 0 ,1 ] 
  55.    //   [ -2, 0, 2 ] 
  56.    //   [ -1, 0 ,1 ] 
  57.    delta1 =  (c3 + 2*c5 + c8)-(c1 + 2*c4 + c6); 
  58.  
  59.    // Gradient vertical 
  60.    //   [ -1,- 2,-1 ] 
  61.    //   [  0,  0, 0 ] 
  62.    //   [  1,  2, 1 ] 
  63.    delta2 = (c6 + 2*c7 + c8)-(c1 + 2*c2 + c3); 
  64.  
  65.    // calcul 
  66.    value = sqrt( mul(delta1,delta1) + mul(delta2,delta2) ) ; 
  67.  
  68.    if( value >.3 ) 
  69.    { 
  70. //////////////////////////////////////////////////// 
  71. // si contour, sharpen 
  72. #define Sharpen_val0       2.0 
  73. #define Sharpen_val1       0.125 
  74.       final = ori*2 - (c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 ) * 0.125 ; 
  75. //      final= float4(1,0,0,0); 
  76.       return final; 
  77.    } 
  78.    else 
  79.    { 
  80. //////////////////////////////////////////////////// 
  81. // sinon, image corrig├⌐e 
  82.       return cori; 
  83.    } 
  84. }